iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 7
1
自我挑戰組

我的語言自學接力系列 第 7

D7:[Java]類別的繼承(設定終止繼承)

  • 分享至 

  • xImage
  •  

在父類別中,有不希望被子類別繼承的成員 可以加上final 來終止繼承。
若父類別中的函數成員加上 final ,子類別也就無法改寫(overriding)。

  • 宣告為 final 後的變數,如同常數一般,無法再被更改
  • 函數宣告 final後,無法改寫(overriding)
  • 類別亦可宣告 final,如此一來就沒有子類別可以繼承

修改 super與this 文章中的範例,來做本篇的示範:

final class Cfinal
{
	public void show()
	{
		System.out.println("Cfinal 父類別");
	}
}
class Ctest extend Cfinal
{
	public void show()
	{
		System.out.println("Ctest 子類別");
	}
}

class Caaa
{
   protected final int num=10;

   public final void show()
   {
      System.out.println("Caaa_num="+num);
   }
}
class Cbbb extends Caaa
{
   int num=10;

   public void show()
   {
      super.num=20;
      System.out.println("Cbbb_num="+num);
      super.show();
   }
}

public class supervsthis
{
   public static void main(String args[])
   {
      Cbbb b=new Cbbb();
      b.show();
   }
}

於本次範例有幾個點注意的部分:

  • 將父類別 Cfinal 經過 final 宣告,因此底下的子類別 Ctest 是無法繼承父類別的
    class Ctest extend Cfinal
  • 再看到另一個父類別 Caaa 中,
protected final int num=10;

public final void show()
{
      System.out.println("Caaa_num="+num);
}

分別有 資料成員 num 與函數show() 經過 final 宣告,
因此在子類別 Cbbb 就無法正常繼承來自父類別的 num 或是 改寫父類別的 show() 函數

  • 另外在 num 部分,若一變數想要經過 final 宣告,必須給訂一個值;
    使之變成像常數一般,無法更改。

protected final int num=10;
常見範例如:

protected final double PI=3.1415;
如此一來,程式任何一處將不會更改到 PI 值。


如果您喜歡我的文章,可以至 4xDevJava 學習系列閱讀更多 Java 文章。


上一篇
D6:[Java]super() 與 this()
下一篇
D8:[Java]抽象類別(基本概念)
系列文
我的語言自學接力31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言